// DataLibrary InterfacePlugin Skin - Profile

// 識別子：DL_PRF
// 内容  ：プロフィール用スキン。

//----------------------------------------------------------------------------//
// Plugin
//----------------------------------------------------------------------------//

//-- プラグインの読み込み処理 --//
DL_LoadSkin_Profile:
	Call DL_LoadSkin "Common"  // スキン用の共有サブルーチンを読み込む
Return


//-- プラグインの終了処理 --//
//DL_UnLoadSkin_Profile:
//Return


//----------------------------------------------------------------------------//
// HelpText
//----------------------------------------------------------------------------//

//-- ヘルプ用ショートカットキー一覧 --//
DL_HLP_LoadHelpText_Profile:
	Call DL_HLP_SetKeyHelp "右クリック" "最初の画面に戻る"
	Call DL_HLP_SetKeyHelp "BackSpace" "最初の画面に戻る"
	Call DL_HLP_SetKeyHelp "ESC" (DL_MainTitle & "を終了します")
	Call DL_HLP_SetKeyHelp "F1" "最初の画面に戻る"
	Call DL_HLP_SetKeyHelp "F2" "ヘルプを開く"
	Call DL_HLP_SetKeyHelp "F3" "コンフィグを開く"
	Call DL_HLP_SetKeyHelp "←" "前のページへ"
	Call DL_HLP_SetKeyHelp "→" "次のページへ"
Return


//-- ヘルプ用ショートカットキー一覧 --//
DL_HLP_LoadHelpText_ProfileData:
	Call DL_HLP_SetKeyHelp "右クリック" "項目一覧に戻る"
	Call DL_HLP_SetKeyHelp "BackSpace" "項目一覧に戻る"
	Call DL_HLP_SetKeyHelp "ESC" (DL_MainTitle & "を終了します")
	Call DL_HLP_SetKeyHelp "F1" "最初の画面に戻る"
	Call DL_HLP_SetKeyHelp "F2" "ヘルプを開く"
	Call DL_HLP_SetKeyHelp "F3" "コンフィグを開く"
	Call DL_HLP_SetKeyHelp "I" "BGMを演奏する"
	Call DL_HLP_SetKeyHelp "M" "画像を切り替える"
	Call DL_HLP_SetKeyHelp "PageUp" "文章を上にページ単位でスクロールする"
	Call DL_HLP_SetKeyHelp "PageDown" "文章を下にページ単位でスクロールする"
	Call DL_HLP_SetKeyHelp "Home" "文章の最上部にスクロールする"
	Call DL_HLP_SetKeyHelp "End" "文章の最下部にスクロールする"
	Call DL_HLP_SetKeyHelp "↑" "文章を上にスクロールする"
	Call DL_HLP_SetKeyHelp "↓" "文章を下にスクロールする"
	Call DL_HLP_SetKeyHelp "←" "前の項目へ"
	Call DL_HLP_SetKeyHelp "→" "次の項目へ"
Return


//----------------------------------------------------------------------------//
// Skin-Profile
//----------------------------------------------------------------------------//

//-- SkinAction action_id select_id : アクションに合わせてインターフェースを再描画する --//
DL_PRF_SkinAction:
	Switch Args(1)
	Case "StartInterface"
		// スクロールの準備をする
		Call DL_SetScrollData "Profile" "PageB" 20 DL_LibCount[DL_ShowLib] RoundUp(DL_ShowID / 20)
		
		Call DL_CMN_ChangeFontFace "Profile"  // 個別フォント指定を適用する
		Call DL_PRF_DisplayInterface          // インターフェースを表示する
	Case "EndInterface"
		// スクロール情報を削除する
		Call DL_SetScrollData "Profile" "Delete"
		
		Call DL_CMN_ClearFontFace "Profile"   // 個別フォント指定を解除する
	Case "StartSubInterface"
		Call DL_CMN_ClearFontFace "Profile"   // 個別フォント指定を解除する
	Case "EndSubInterface"
		Call DL_CMN_ChangeFontFace "Profile"  // 個別フォント指定を再適用する
		Call DL_PRF_DisplayInterface          // インターフェースを表示し直す
	Case "SelectProfile"
		Call DL_CMN_ListFrameAction Args(2) "Select"
		Refresh
	Case "SelectScroll"
		Call DL_CMN_PageControllAciton Args(2) "Select"
		Refresh
	Case "RedrawScroll"
		Call DL_PRF_DisplayInterface
		Refresh
	Case "CancelScroll"
		ClearPicture
		Refresh
	Case "SelectHelp"
		Call DL_CMN_ImageButtonAction "Help" "Select"
		Refresh
	Case "SelectConfig"
		Call DL_CMN_ImageButtonAction "Config" "Select"
		Refresh
	Case "SelectReturn"
		Call DL_CMN_ImageButtonAction "Return" "Select"
		Refresh
	Case "CancelQuit"
		ClearPicture
		Refresh
	EndSw
Return


//-- DisplayInterface : インターフェースを表示する --//
DL_PRF_DisplayInterface:
	Call DL_CMN_ClearDisplay      // 画面を初期化する
	Call DL_CMN_ClearShortcutKey  // ショートカットキーを初期化する
	UnSet DL_CMN_ActionData       // アクションデータを初期化する
	
	// 文字・線の描画方法を保持にする
	Call DL_CMN_SetDrawOption "保持"
	
	// 背景とタイトルを表示する
	Call DL_CMN_Background
	Call DL_CMN_Title DL_GetLibTitle(DL_ShowLib) DL_GetLibIcon(DL_ShowLib)
	
	// アイコン表示の準備を行う
	Local icon_display
	Local icon_type = "保持"
	If DL_PRF_Setting[DL_ShowLib, "IconDisplay"] = 1 Then
		icon_display = "DL_GetLibItemData(DL_ShowLib, i, 2)"
	EndIf
	If DL_PRF_Setting[DL_ShowLib, "IconType"] = 1 Then
		icon_type = "保持 透過"
	EndIf
	
	// プロフィールリストを表示する
	Local px = 19
	Local py = 64
	Local i
	For i = DL_ScrollFirst("Profile") To DL_ScrollLast("Profile")
		Call DL_CMN_ListFrame ("Profile " & i) px py 216 24 DL_GetLibItemData(DL_ShowLib, i, 1) _
			IIf(DL_IsFlagUnread(DL_GetLibItemID(DL_ShowLib, i)), "Unread", "Point") _
			Eval(icon_display) icon_type
		Incr px (225 * (-1 + 2 * (i Mod 2)))
		Incr py (36 * ((i Mod 2) = 0))
	Next
	
	// スクロールボタンを表示する
	Call DL_CMN_PageControll 166 429 "Profile"
	
	// 戻るボタンを表示する
	Call DL_CMN_ImageButton "Return" DL_Image["Return"] 424 8 32 32 _
		IIf(IsVarDefined(DL_SingleMode), "終了する", "戻る") 1
	
	// アイコンを表示する
	Call DL_CMN_ImageButton "Config" DL_Image["IconConfig"] 395 435 24 24 "コンフィグを表示する" 1
	Call DL_CMN_ImageButton "Help" DL_Image["IconHelp"] 430 435 24 24 "ヘルプを表示する" 1
	
	// 文字・線の描画方法を通常にする
	Call DL_CMN_SetDrawOption "通常"
	
	// ショートカットキーを設定する
	Call DL_CMN_SetShortcutKey 2 "Cancel"    // RightClick
	Call DL_CMN_SetShortcutKey 8 "Cancel"    // BS
	Call DL_CMN_SetShortcutKey 27 "Quit"     // ESC
	Call DL_CMN_SetShortcutKey 112 "Index"   // F1
	Call DL_CMN_SetShortcutKey 113 "Help"    // F2
	Call DL_CMN_SetShortcutKey 114 "Config"  // F3
	If DL_GetScrollData("Profile", "IsPrev") Then
		Call DL_CMN_SetShortcutKey 37 "Scroll Profile -1"  // ←
	EndIf
	If DL_GetScrollData("Profile", "IsNext") Then
		Call DL_CMN_SetShortcutKey 39 "Scroll Profile +1"  // →
	EndIf
Return


//----------------------------------------------------------------------------//
// Skin-ProfileData
//----------------------------------------------------------------------------//

//-- SkinAction action_id select_id : アクションに合わせてインターフェースを再描画する --//
DL_PRFD_SkinAction:
	Switch Args(1)
	Case "NowLoading"
		// 読み込み中表示を表示する
		Call DL_CMN_NowLoading
		Refresh
		
		// 文章関連で使用するのでフォントなどはここで設定しておく
		Call DL_CMN_ChangeFontFace "ProfileData"  // 個別フォント指定を適用する
		Set DL_PRFD_TextWidth 393                 // 文章を表示する幅を設定する
	Case "StartInterface"
		// スクロールの準備をする
		Call DL_SetScrollData "ProfileText" "Line" 10 DL_PRFD_Text[DL_PRFD_DataID, 0] DL_PRFD_ShowTextPos
		Call DL_PRFD_DisplayInterface             // インターフェースを表示する
	Case "EndInterface"
		// スクロール情報を削除する
		Call DL_SetScrollData "ProfileText" "Delete"
		
		Call DL_CMN_ClearFontFace "ProfileData"   // 個別フォント指定を解除する
	Case "StartSubInterface"
		Call DL_CMN_ClearFontFace "ProfileData"   // 個別フォント指定を解除する
	Case "EndSubInterface"
		Call DL_CMN_ChangeFontFace "ProfileData"  // 個別フォント指定を再適用する
		Call DL_PRFD_DisplayInterface             // インターフェースを表示し直す
	Case "SelectTextScroll"
		Call DL_CMN_ImageButtonAction Args(2) "Select"
		Refresh
	Case "ContinueTextScroll"
		Call DL_PRFD_ProfileText 20 188 DL_PRFD_DataID
		Refresh
	Case "RedrawTextScroll"
		Call DL_CMN_SetDrawOption "保持"
		Call DL_PRFD_ProfileTextFrame 20 188 "Redraw"
		Call DL_CMN_SetDrawOption "通常"
		Call DL_PRFD_ProfileText 20 188 DL_PRFD_DataID
		Refresh
	Case "SelectLink"
		Call DL_PRFD_DrawLinkTextAction Args(2)
		Refresh
		
		// 文章の表示位置を記録しておく
		Set DL_PRFD_ShowTextPos DL_GetScrollData("ProfileText", "NowPos")
	Case "SelectImage"
		ClearObj "Image"
		Call DL_CMN_SetDrawOption "保持"
		Call DL_PRFD_ProfileImage 24 48 DL_PRFD_DataID
		Call DL_CMN_SetDrawOption "通常"
		Refresh
	Case "SelectMusic"
		Call DL_CMN_ImageButtonAction "Music" (1 + (DL_PlayMusic = DL_PRFD_Music[DL_PRFD_DataID]))
		Refresh
	Case "SelectDataShift"
		Call DL_CMN_ImageButtonAction Args(2) "Select"
		Refresh
	Case "SelectScroll"
		Call DL_CMN_PageControllAciton Args(2) "Select"
		Refresh
	Case "RedrawScroll"
		Call DL_PRFD_DisplayInterface
		Refresh
	Case "CancelScroll"
		ClearPicture
		Refresh
	Case "SelectHelp"
		Call DL_CMN_ImageButtonAction "Help" "Select"
		Refresh
	Case "SelectConfig"
		Call DL_CMN_ImageButtonAction "Config" "Select"
		Refresh
	Case "SelectReturn"
		Call DL_CMN_ImageButtonAction "Return" "Select"
		Refresh
	Case "CancelQuit"
		ClearPicture
		Refresh
	EndSw
Return


//-- DisplayInterface : インターフェースを表示する --//
DL_PRFD_DisplayInterface:
	Call DL_CMN_ClearDisplay      // 画面を初期化する
	Call DL_CMN_ClearShortcutKey  // ショートカットキーを初期化する
	UnSet DL_CMN_ActionData       // アクションデータを初期化する
	
	// 文字・線の描画方法を保持にする
	Call DL_CMN_SetDrawOption "保持"
	
	// 背景を表示する
	Call DL_CMN_Background
	
	// 移動ボタンを表示する
	Call DL_PRFD_NavigationButton 153 8 // 22 6 $ 153 6 $ 22 441
	Call DL_CMN_ImageButton "Return" DL_Image["Return"] 424 8 32 32 "戻る" 1
	
	// アイコンを表示する
	Call DL_CMN_ImageButton "Config" DL_Image["IconConfig"] 22 445 24 24 "コンフィグを表示する" 1
	Call DL_CMN_ImageButton "Help" DL_Image["IconHelp"] 57 445 24 24 "ヘルプを表示する" 1
	
	// ミュージックアイコンを表示する
	If IsVarDefined(DL_PRFD_Music[DL_PRFD_DataID]) Then
		Call DL_CMN_ImageButton "Music" DL_Image["IconProfileMusic"] 22 12 24 24 _
			"BGMを演奏する" (1 + (DL_PlayMusic = DL_PRFD_Music[DL_PRFD_DataID]))
	EndIf
	
	// プロフィールデータを表示する Image(326,48) Data(20,48)
	Call DL_PRFD_ProfileImage 24 48 DL_PRFD_DataID
	Call DL_PRFD_ProfileData 164 48 DL_PRFD_DataID
	Call DL_PRFD_ProfileTextFrame 20 188
	
	// 文字・線の描画方法を通常にする
	Call DL_CMN_SetDrawOption "通常"
	
	// プロフィール文章を表示する
	Call DL_PRFD_ProfileText 20 188 DL_PRFD_DataID
	
	// ショートカットキーを設定する
	Call DL_CMN_SetShortcutKey 2 "Cancel"    // RightClick
	Call DL_CMN_SetShortcutKey 8 "Cancel"    // BS
	Call DL_CMN_SetShortcutKey 27 "Quit"     // ESC
	Call DL_CMN_SetShortcutKey 112 "Index"   // F1
	Call DL_CMN_SetShortcutKey 113 "Help"    // F2
	Call DL_CMN_SetShortcutKey 114 "Config"  // F3
	If LLength(DL_PRFD_Image[DL_PRFD_DataID]) > 1 Then
		Call DL_CMN_SetShortcutKey 73 "Image"  // I
	EndIf
	If IsVarDefined(DL_PRFD_Music[DL_PRFD_DataID]) Then
		Call DL_CMN_SetShortcutKey 77 "Music"  // M
	EndIf
Return


//-- NavigationButton x y : --//
DL_PRFD_NavigationButton:
	Incr BaseX Args(1)
	Incr BaseY Args(2)
	
	Local lib_cnt = DL_LibCount[DL_ShowLib]
	Local text = "No." & Format(DL_ShowID, "00") & "/" & Format(lib_cnt, "00")
	Local text_color = ""
	
	If IsVarDefined(DL_PRFD_ProfileLink) Then
		lib_cnt = 0
		text = "- Link -"
		text_color = "Emphasis"
	EndIf
	
	Call DL_CMN_ImageButton "DataShift -1" DL_Image["ArrowLeft"] 0 0 32 32 "前の項目へ" (lib_cnt > 1)
	Call DL_CMN_ImageButton "DataShift +1" DL_Image["ArrowRight"] 141 0 32 32 "次の項目へ" (lib_cnt > 1)
	
	Font 11pt DL_FontFace["Number"] Regular
	Call DL_CMN_Frame 37 4 100 24
	Call DL_CMN_DrawString (37 + DL_SCX(text, 100)) 9 text text_color
	
	// ショートカットキーを設定する
	If (DL_LibCount[DL_ShowLib] > 1) And (IsVarDefined(DL_PRFD_ProfileLink) = 0) Then
		Call DL_CMN_SetShortcutKey 37 "DataShift -1"  // ←
		Call DL_CMN_SetShortcutKey 39 "DataShift +1"  // →
	EndIf
	
	Incr BaseX (Args(1) * -1)
	Incr BaseY (Args(2) * -1)
Return


//-- ProfileImage x y data_id : 画像を表示する --//
DL_PRFD_ProfileImage:
	Incr BaseX Args(1)
	Incr BaseY Args(2)
	
	Local data_id = Args(3)
	Local file = LIndex(DL_PRFD_Image[data_id], DL_PRFD_ShowImage)
	
	// 画像を表示する
	Call DL_CMN_BackgroundArea 0 0 132 132 DL_Background["ProfileImage"]
	Call DL_PRFD_DrawImage file 2 2 128 128 "保持"
	
	// 切り替えボタンを設定する
	If LLength(DL_PRFD_Image[data_id]) > 1 Then
		Local text = RSet(DL_PRFD_ShowImage, 2) & "/" & LSet(LLength(DL_PRFD_Image[data_id]), 2)
		Local bg_color = LIndex(DL_Background["ProfileImage"], 1)
		
		Font 9pt DL_FontFace["List"] Regular
		Line 92 114 128 128 BF IIf(bg_color != "", bg_color, "#000000")
		Call DL_CMN_DrawString (92 + DL_SCX(text, 38)) 116 text
		
		Call DL_CMN_HotPoint "Image" 0 0 132 132 "画像を切り替える"
	EndIf
	
	Incr BaseX (Args(1) * -1)
	Incr BaseY (Args(2) * -1)
Return




//-- ProfileData x y data_id : 名称とデータを表示する --//
DL_PRFD_ProfileData:
	Incr BaseX Args(1)
	Incr BaseY Args(2)
	
	Local data_id = Args(3)
	Local name = LIndex(DL_PRFD_Name[data_id], 1)
	Local ruby = LIndex(DL_PRFD_Name[data_id], 2)
	
	Local font_name = IIf(DL_FontFace["ProfileDataName"] != "", DL_FontFace["ProfileDataName"], DL_FontFace["List"])
	Local font_ruby = IIf(DL_FontFace["ProfileDataRuby"] != "", DL_FontFace["ProfileDataRuby"], font_name)
	
	// 名称を表示する
	Font 12pt font_name Regular
	Call DL_CMN_Frame 0 0 296 32
	If ruby != "" Then
		Local width = TextWidth(name)
		Call DL_CMN_DrawString 9 13 name
		Font 8pt font_ruby
		Call DL_CMN_DrawString Max(9 + DL_SCX(ruby, width), 4) 2 ruby
	Else
		Call DL_CMN_DrawString 9 11 name
	EndIf
	
	// 項目を描画する
	Local py = 42
	Local data i
	
	Font 11pt DL_FontFace["List"] Regular
	For i = 1 To 3
		data = DL_PRFD_GetDataListString(data_id, i)
		If data != "" Then
			Call DL_CMN_Frame 24 py 272 24
			Call DL_CMN_DrawString 33 (py + 5) data "Normal"
			Incr py 32
		EndIf
	Next
	
	Incr BaseX (Args(1) * -1)
	Incr BaseY (Args(2) * -1)
Return


//-- ProfileTextFrame x y data_id [mode] : 文章表示枠を表示する --//
DL_PRFD_ProfileTextFrame:
	Incr BaseX Args(1)
	Incr BaseY Args(2)
	
	// 再描画時にはHotPointやショートカットキー設定を削除する
	If Args(3) = "Redraw" Then
		ClearObj "TextScroll ProfileText -1"
		ClearObj "TextScroll ProfileText +1"
		ClearObj "TextScroll ProfileText -P"
		ClearObj "TextScroll ProfileText +P"
		Call DL_CMN_ClearShortcutKey 33 34 35 36 38 40
		Call DL_PRFD_ClearLinkPoint  // 文章中リンクのHotPointを削除する
	EndIf
	
	Local bg_setting = DL_Background["ScrollControl"]
	Local is_prev = DL_GetScrollData("ProfileText", "IsPrev")
	Local is_next = DL_GetScrollData("ProfileText", "IsNext")
	
	// フレームを表示する
	Call DL_CMN_BackgroundArea 0 0 404 248 DL_Background["Frame"]
	Call DL_CMN_BackgroundArea 404 0 36 248 IIf(bg_setting != "", bg_setting, DL_Background["Frame"])
	Call DL_CMN_DrawLine 0 0 440
	Call DL_CMN_DrawLine 0 247 440
	Call DL_CMN_Frame 292 257 148 24
	
	// ボタンを表示する
	Call DL_CMN_ImageButton "TextScroll ProfileText -P" DL_Image["ArrowUp2"] _
		406 5 32 32 "文章を上にページ単位でスクロールする" is_prev
	Call DL_CMN_ImageButton "TextScroll ProfileText -1" DL_Image["ArrowUp"] _
		406 39 32 32 "文章を上にスクロールする" is_prev
	Call DL_CMN_ImageButton "TextScroll ProfileText +1" DL_Image["ArrowDown"] _
		406 178 32 32 "文章を下にスクロールする" is_next
	Call DL_CMN_ImageButton "TextScroll ProfileText +P" DL_Image["ArrowDown2"] _
		406 212 32 32 "文章を下にページ単位でスクロールする" is_next
	
	// ショートカットキーを設定する
	If is_prev Then
		Call DL_CMN_SetShortcutKey 38 "TextScroll ProfileText -1"  // ↑
		Call DL_CMN_SetShortcutKey 33 "TextScroll ProfileText -P"  // PageUp
		Call DL_CMN_SetShortcutKey 36 "TextScroll ProfileText 1"   // Home
	EndIf
	If is_next Then
		Call DL_CMN_SetShortcutKey 40 "TextScroll ProfileText +1"  // ↓
		Call DL_CMN_SetShortcutKey 34 "TextScroll ProfileText +P"  // PageDown
		Call DL_CMN_SetShortcutKey 35 "TextScroll ProfileText Max" // End
	EndIf
	
	Incr BaseX (Args(1) * -1)
	Incr BaseY (Args(2) * -1)
Return


//-- ProfileText x y data_id : 文章を表示する --//
DL_PRFD_ProfileText:
	Incr BaseX Args(1)
	Incr BaseY Args(2)
	
	Local data_id = Args(3)
	
	// 表示領域を消去する
	ClearPicture 0 0 439 247
	ClearPicture 292 257 440 280
	
	// 文章を表示する
	Call DL_PRFD_DrawProfileText 10 13 "ProfileText" DL_PRFD_DataID
	
	// 行数を表示する
	Local text = "TEXT " & RSet(DL_GetScrollData("ProfileText", "ScrollData"), 11)
	Font 11pt DL_FontFace["Number"] Regular
	Call DL_CMN_DrawString (292 + DL_SCX(text, 148)) 262 text
	
	Incr BaseX (Args(1) * -1)
	Incr BaseY (Args(2) * -1)
Return


//-- NowLoading : 読み込み中表示を表示する --//
DL_PRFD_NowLoading:	
	Font 40pt "明朝" #ffffff Bold Italic
	Call DL_CMN_BackgroundArea 0 177 480 64 DL_Background["NowLoading"]
	Call DL_CMN_DrawString DL_SCX("Now Loading...", 480) 180 "Now Loading..."
Return


//----------------------------------------------------------------------------//
// Interface Subroutine
//----------------------------------------------------------------------------//

//-- SetProfileTextFont : プロフィール文章用のフォントを設定する --//
DL_PRFD_SetProfileTextFont:
	// このサブルーチンはデータ読み込み時と文章描画時に呼び出されます
	Font DL_FontFace["Text"] 11pt Regular
Return


//-- SetProfileTextRubyFont : プロフィール文章用のふりがなフォントを設定する --//
DL_PRFD_SetProfileTextRubyFont:
	// このサブルーチンは文章描画時に呼び出されます
	Font DL_FontFace["Text"] 6pt Regular
Return


